package nsu.edu.zsq.service.sys;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.github.pagehelper.PageInfo;

import nsu.edu.zsq.bean.ExamStudent;
import nsu.edu.zsq.bean.ExamTeacher;
import nsu.edu.zsq.bean.SchExam;
import nsu.edu.zsq.bean.Student;
import nsu.edu.zsq.bean.Teacher;
import nsu.edu.zsq.param.PageQuery;

/** 
* Description: 考试的service类<br>
*/
public interface SchExamService {
    
    /**
     * 获取一条考试信息
     * @param schExamId 考试id
     * @return SchExam
     */
    public SchExam getSchExam(int schExamId);

    /**
     * 获取考试课程列表
     * @param majorNo 专业代码
     * @param pageQuery 分页数据
     * @return PageInfo<SchExam>
     */
    public PageInfo<SchExam> listSchExamByMajorNoWithPage(String majorNo, PageQuery pageQuery);
    
    /**
     * 获取本专业所有授课课程
     * @param majorNo 专业代码
     * @return List<HashMap<String, String>>
     */
    public List<HashMap<String, String>> listStuCourseByMajorNo(String majorNo);
    
    /**
     * 保存一条课程信息到考试表
     * @param courseNos 课程代码数组
     * @param majorNo 专业代码
     */
    public void saveCourseToSchExam(String[] courseNos, String majorNo);
    
    /**
     * 删除考试表中的课程
     * @param schExamIds 考试id
     */
    public void deleteCourseFromSchExam(int[] schExamIds);

    /**
     * 更新一条考试信息
     * @param schExam 考试信息
     */
    public void updateSchExam(SchExam schExam);
    
    /**
     * 获取一条考试信息,带有教室
     * @param schExamId 考试id
     * @return Map<String, Object> key:tchExam roomNames 
     */
    public Map<String, Object> getSchExamWithRoom(int schExamId);

    /**
     * 添加考试教室
     * @param schExam
     */
    public void saveExamRoom(SchExam schExam);

    /**
     * 根据考试id删除考试教室
     * @param schExamId 考试id
     * @param roomNames 教室名称数组
     */
    public void delExamRoom(int schExamId, String[] roomNames);

    /**
     * 获取监考教师列表
     * @param schExam 考试教室信息（id,roomName）
     * @return List<ExamTeacher>
     */
    public List<ExamTeacher> listExamTeacher(SchExam schExam);

    /**
     * 根据专业代码获取专业所在院系的所有教师信息
     * @param majorNo 专业代码
     * @param pageQuery 分页数据
     * @return PageInfo<Teacher>
     */
    public PageInfo<Teacher> listTeacherByMajorNoWithPage(String majorNo, PageQuery pageQuery);

    /**
     * 单个/批量添加监考教师
     * @param examTeacher 监考教师信息
     * @param teacherNos 教师编号数组
     */
    public void saveTeacherToExam(ExamTeacher examTeacher, String[] teacherNos);

    /**
     * 单个/批量删除监考教师
     * @param examTeacherIds 监考教师id数组
     */
    public void delExamTeacher(int[] examTeacherIds);

    /**
     * 获取当前考场中的考试学生信息
     * @param schExam 考试信息
     * @return List<ExamStudent>
     */
    public List<ExamStudent> listExamStudent(SchExam schExam);

    /**
     * 根据课程代码获取课程下所有的学生信息
     * @param courseNo 课程代码
     * @param pageQuery 分页信息
     * @return PageInfo<Student>
     */
    public PageInfo<Student> listStudentByMajorNoWithPage(String courseNo, PageQuery pageQuery);

    /**
     * 添加考试学生信息
     * @param examStudent 考试学生信息
     * @param stuNos 学号数组
     */
    public void saveStudentToExam(ExamStudent examStudent, String[] stuNos);

    /**
     * 单个/批量删除考试学生
     * @param examStudentIds 考试学生id数组
     */
    public void delExamStudent(int[] examStudentIds);
    
    /**
     * 考试学生的座位号自动排号
     * @param examStudent 考试学生信息（examId,roomName）
     */
    public void autoSeatNumber(ExamStudent examStudent);
}
